﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data.Common;
using System.Data;
using UricaoWeb.Datos.Excepciones.Menu;
using System.Data.SqlClient;
using System.Windows.Forms;


namespace UricaoWeb.Datos.ConexionBD.Menu
{

    public class datoMenu
    {
        public static string _mensajeErrorBD = "";
        #region Metodos
        ///<sumary>
        ///Constructor por defecto
        ///Parámetros:(no posee)
        ///Retorno: (no posee)
        ///Excepeciones: (no posee)
        ///</sumary>
        public datoMenu()
        { }

        ///<sumary>
        ///Metodo para asignar el string connection de la BD
        ///Parámetros:(no posee)
        ///Retorno: la cadena de coneccion con la BD
        ///Excepeciones: (no posee)
        ///</sumary>
        public static string constr
        {
            get { return ConfigurationManager.ConnectionStrings["UricaoBD"].ConnectionString; }
        }

        ///<sumary>
        ///Metodo para obtener el proveedor que esta en Web.config
        ///Parámetros:(no posee)
        ///Retorno: cadena que posee el nkbre del proveedor de servicio
        ///Excepeciones: (no posee)
        ///</sumary>
        public static string Provider
        {
            get { return ConfigurationManager.ConnectionStrings["UricaoBD"].ProviderName; }
        }

        ///<sumary>
        ///Metodo necesario para lograr la conexion con la base de datos
        ///Parámetros:(no posee)
        ///Retorno: devuelve una instacia de DbProviderFactory para la conexion con la BD
        ///Excepeciones: (no posee)
        ///</sumary>
        public static DbProviderFactory dpf
        {
            get { return DbProviderFactories.GetFactory(Provider); }
        }

        ///<sumary>
        ///Metodo GENERAL, capaz de ejecutar en SQL cualquier procedimiento almacenado
        ///Parámetros:
        ///StroredProcedure: procedimiento a ejecutar, parametros: lista de parametros que contendra el objeto
        ///Retorno: Id de la consulta en sql
        ///Excepeciones:
        ///SQL excepcion
        ///MenuExcepciones
        ///</sumary>
        public static int ejecutaNonQuery(string StoredProcedure, List<DbParameter> parametros)
        {
            int Id = 0;
            try
            {
                using (DbConnection con = dpf.CreateConnection())
                {
                    con.ConnectionString = constr;
                    using (DbCommand cmd = dpf.CreateCommand())
                    {
                        cmd.Connection = con;
                        cmd.CommandText = StoredProcedure;
                        cmd.CommandType = CommandType.StoredProcedure;

                        foreach (DbParameter param in parametros)
                            cmd.Parameters.Add(param);
                        con.Open();
                        Id = cmd.ExecuteNonQuery();

                    }
                }
            }


            catch (SqlException e)
            {
                _mensajeErrorBD = "Error Conexion entre BD";


            }
            catch (Exception e)
            {
                _mensajeErrorBD = "Error Perdida de conexion";

            }
            return Id;

        }
        #endregion
    }
}